// Room interface
public interface Room {
    void setPrice(double price);
    double getPrice();
    void payForRoom();
}

// SilverUserLevel interface
public interface SilverUserLevel {
    double getDiscount();
    double getRoomPriceWithDiscount(double originalPrice);
}

// SilverUserLevel implementation
public class SilverUserLevelImpl implements SilverUserLevel {
    @Override
    public double getDiscount() {
        // Assume a 10% discount for silver level users
        return 0.10;
    }

    @Override
    public double getRoomPriceWithDiscount(double originalPrice) {
        return originalPrice * (1 - getDiscount());
    }
}

// Concrete Room class (example implementation)
public class ConcreteRoom implements Room {
    private double price;
    private SilverUserLevel userLevel;

    public ConcreteRoom(SilverUserLevel userLevel) {
        this.userLevel = userLevel;
    }

    @Override
    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public double getPrice() {
        // Here we could return the price directly, or apply a discount based on user level
        // For simplicity, let's return the price directly and assume the discount is applied at checkout
        return price;
    }

    @Override
    public void payForRoom() {
        // Simulate payment process
        double discountedPrice = userLevel.getRoomPriceWithDiscount(price);
        System.out.println("Paid for room: $" + discountedPrice);
    }
}

// Client class
public class Client {
    private Room room;

    public Client(Room room) {
        this.room = room;
    }

    public double getRoomPrice() {
        return room.getPrice();
    }

    public void payForRoom() {
        room.payForRoom();
    }

    public static void main(String[] args) {
        SilverUserLevel userLevel = new SilverUserLevelImpl();
        Room room = new ConcreteRoom(userLevel);
        room.setPrice(100.0); // Set the original price of the room

        Client client = new Client(room);
        System.out.println("Room price without discount: $" + client.getRoomPrice());
        client.payForRoom(); // Pay for the room with discount applied
    }
}